package com.itcam;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * @author : Cammy.Wu
 * Description : 
 */

// 枚举本身也是一个类
public enum SingleEnum {

    INSTANCE;

    public SingleEnum getInstance() {
        return INSTANCE;
    }
}

class Test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        // 获取单例枚举类 SingleEnum 的实例 instance1
        SingleEnum instance1 = SingleEnum.INSTANCE;
        /**
         * 通过反射获取 SingleEnum 类的构造函数。
         * 枚举类的构造函数默认有两个参数，分别是 String 类型的 name 和 int 类型的 ordinal。
         * 这里尝试获取带有这两个参数的构造函数。
         */
        Constructor<SingleEnum> declaredConstructor = SingleEnum.class.getDeclaredConstructor(String.class, int.class);
        // 设置构造函数的可访问性为 true，这样可以绕过 Java 的访问控制，调用私有构造函数
        declaredConstructor.setAccessible(true);
        // 使用反射获取的构造函数创建 SingleEnum 类的新实例 instance2
        SingleEnum instance2 = declaredConstructor.newInstance();

    }
}
